約 3,222,508 件
https://w.atwiki.jp/nicodqmod/pages/44.html
火打石とダイヤの打ち金アイテムとはなんなのですかね?もしくは使ってしまった場合どうすればいいのでしょうか? - 名無しさん 2014-07-20 02 40 46 火打石とダイヤの打ち金は、本当は 追加ディメンションへのゲートを開くアイテムの予定だったのですが、現在その追加ディメンションの実装が不可能な状況となったため、耐久力が高いだけの着火用アイテムとなっております。 - えーぜ 2014-07-20 13 46 33 使ってしまった後に コンソールにTEST~~~~がたくさん流れてしまうのですが 解除方法などはありますか? - 名無しさん 2014-07-22 17 16 12 回答遅くなりました。デバッグ作業の時のテスト用コードの消し忘れかもしれません。どのような感じで流れてるかわからないですが、現状対応方法思い浮かばないです・・・・。ただ、近々、Ext最終版をver1.00としてリリース予定で、そちらを導入すれば改善されるかもしれませんので、もう少々お待ちいただければと思います。本当に申し訳ないです m(_ _)m - えーぜ 2014-08-02 13 30 15 マルチ用HP/MP表示機能だけ導入したいのですがどうにかできないでしょうか? - 名無しさん 2014-07-08 19 36 50 .minecraft\config\DQM3modExt.cfg で、マルチ用GUI機能以外の使用設定をオフにすれば大丈夫かと。 - えーぜ 2014-07-10 13 11 24 魔法の杖とかを一つにまとめるアイテムとか追加できませんか? - 名無しさん 2014-06-21 22 11 43 それだと、完全に別システム組まないといけなくなりそうなので難しいです。申し訳ない(汗 - えーぜ 2014-07-10 13 10 13 光源でのモンスター湧き抑止ってやっぱり難しいんでしょうか。拠点内にタイル置くとベッドが利用不可になりますし。階段とかインテリアの上とかも気になりますし。 - 名無しさん 2014-06-08 04 44 24 Ext側からの光源による沸き潰し制御の追加はほぼ不可能です。ただ、拠点内などでしたら、タイル(沸かないタイルですよね?)を使わなくても、丸石や木材などのブロックを敷き詰めることで沸き潰しはできるので、そちらなども利用してみるのはいかがでしょうか? - えーぜ 2014-06-08 08 53 11 御返信有難う御座います。 - 名無しさん 2014-06-08 21 47 19 他のMODの紹介になるけどSpawn Stopperとか使えば沸き潰しできますよ。 - 名無しさん 2014-06-15 11 03 48 dqm3modExt modについての質問や要望はこちらへ - えーぜ 2014-04-29 15 54 11
https://w.atwiki.jp/akasatanahama/pages/103.html
概要 新しく苗木・原木・葉を追加し、苗木が育ったら木が生成されるようにする。 今回は一つのIDで一種類の木しか追加していないが、バニラの木のようにメタデータを利用して何種類かの木を追加することも可能。 ※5/22更新 葉のテクスチャの指定ができていなかったため、追記・修正しました。 テクスチャは、sapling_aluminium,log_aluminium_top,log_aluminium_side,leaves_aluminium,leaves_aluminium_opaqueでそれぞれ指定できます。 ソースコード AluminiumMod.java package tutorial.aluminiummod; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.registry.GameRegistry; import net.minecraft.block.Block; import net.minecraftforge.oredict.OreDictionary; @Mod(modid = AluminiumMod.MODID, name = AluminiumMod.MODNAME, version = AluminiumMod.VERSION) public class AluminiumMod { public static final String MODID = "AluminiumMod"; public static final String MODNAME = "Aluminium Mod"; public static final String VERSION = "1.0.0"; public static Block saplingAluminium; public static Block logAluminium; public static Block leavesAluminium; @EventHandler public void perInit(FMLPreInitializationEvent event) { saplingAluminium = new BlockAluminiumSapling() .setBlockName("saplingAluminium") .setBlockTextureName("aluminiummod sapling_aluminium"); GameRegistry.registerBlock(saplingAluminium, "saplingAluminium"); OreDictionary.registerOre("saplingAluminium", saplingAluminium); logAluminium = new BlockAluminiumLog() .setBlockName("logAluminium") .setBlockTextureName("aluminiummod log_aluminium"); GameRegistry.registerBlock(logAluminium, "logAluminium"); OreDictionary.registerOre("logAluminium", logAluminium); leavesAluminium = new BlockAluminiumLeaves() .setBlockName("leavesAluminium") .setBlockTextureName("aluminiummod leaves_aluminium"); GameRegistry.registerBlock(leavesAluminium, ItemAluminiumLeaves.class, "leavesAluminium"); OreDictionary.registerOre("leavesAluminium", leavesAluminium); } } BlockAluminiumSapling.java +長いので囲みます package tutorial.aluminiummod; import static net.minecraftforge.common.EnumPlantType.*; import java.util.List; import java.util.Random; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; import net.minecraft.block.BlockSapling; import net.minecraft.block.IGrowable; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.init.Blocks; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.IIcon; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraft.world.gen.feature.WorldGenerator; import net.minecraftforge.common.EnumPlantType; import net.minecraftforge.common.IPlantable; import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.event.terraingen.TerrainGen; public class BlockAluminiumSapling extends BlockSapling implements IPlantable, IGrowable { public BlockAluminiumSapling() { super(); this.setCreativeTab(CreativeTabs.tabDecorations); this.setTickRandomly(true); this.setHardness(0F); this.setStepSound(soundTypeGrass); float f = 0.4F; this.setBlockBounds(0.5F - f, 0.0F, 0.5F - f, 0.5F + f, f * 2.0F, 0.5F + f); } @Override public boolean canPlaceBlockAt(World world, int x, int y, int z) { // Blockで上書き可能なブロックかどうかの判定をしているが、BlockBushでcanBlockStayの判定を追加している。 return world.getBlock(x, y, z).isReplaceable(world, x, y, z) this.canBlockStay(world, x, y, z); } @Override protected boolean canPlaceBlockOn(Block block) { // 草、土、耕された土ならtrueを返す。 return block == Blocks.grass || block == Blocks.dirt || block == Blocks.farmland; } @Override public void onNeighborBlockChange(World world, int x, int y, int z, Block block) { this.checkAndDropBlock(world, x, y, z); } @Override protected void checkAndDropBlock(World world, int x, int y, int z) { if (!this.canBlockStay(world, x, y, z)) { this.dropBlockAsItem(world, x, y, z, world.getBlockMetadata(x, y, z), 0); world.setBlockToAir(x, y, z); } } @Override public boolean canBlockStay(World world, int x, int y, int z) { // 下のブロックのcanSustainPlantで判定している。 return world.getBlock(x, y - 1, z).canSustainPlant(world, x, y - 1, z, ForgeDirection.UP, this); } @Override public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) { // 当たり判定を消すため、nullを返している。 return null; } @Override public boolean isOpaqueCube() { return false; } @Override public boolean renderAsNormalBlock() { return false; } @Override public int getRenderType() { return 1; } @Override public EnumPlantType getPlantType(IBlockAccess world, int x, int y, int z) { return Plains; } @Override public Block getPlant(IBlockAccess world, int x, int y, int z) { return this; } @Override public int getPlantMetadata(IBlockAccess world, int x, int y, int z) { return world.getBlockMetadata(x, y, z); } @Override public void updateTick(World world, int x, int y, int z, Random random) { // サーバー側で、checkAndDropBlock・明るさの判定を行い、条件を満たしていれば1/7の確率で成長する。 if (!world.isRemote) { this.checkAndDropBlock(world, x, y, z); if (world.getBlockLightValue(x, y + 1, z) = 9 random.nextInt(7) == 0) { this.func_149879_c(world, x, y, z, random); } } } @Override @SideOnly(Side.CLIENT) public IIcon getIcon(int side, int meta) { // Blockと同様。 return blockIcon; } @Override public void func_149879_c(World world, int x, int y, int z, Random random) { // 一度も成長していないなら一段階成長させ、二段階目なら木を生成する。 // 一段階目の成長が終わったかどうかは、メタデータの二進数四桁目で判断する。 int meta = world.getBlockMetadata(x, y, z); if ((meta 8) == 0) { world.setBlockMetadataWithNotify(x, y, z, meta | 8, 4); } else { this.func_149878_d(world, x, y, z, random); } } @Override public void func_149878_d(World world, int x, int y, int z, Random random) { // Eventを呼び出しているが、他MODでキャンセルされたくなければこの部分は削除してよい。 if (!TerrainGen.saplingGrowTree(world, random, x, y, z)) return; // メタデータを利用して複数種類の木を追加したい場合はバニラの苗木を参考にするとよい。 int meta = 0; // 大木を生成したい場合はこの部分を参考にするとよい。 // Object object = random.nextInt(10) == 0 ? new WorldGenBigTree(true) new WorldGenTrees(true); Object object = new WorldGenAluminiumTrees(true); world.setBlock(x, y, z, Blocks.air, 0, 4); if (!((WorldGenerator) object).generate(world, random, x, y, z)) { world.setBlock(x, y, z, this, meta, 4); } } @Override public boolean func_149880_a(World world, int x, int y, int z, int type) { return world.getBlock(x, y, z) == this (world.getBlockMetadata(x, y, z) 7) == type; } @Override public int damageDropped(int meta) { // Blockと同様。 return 0; } @Override @SideOnly(Side.CLIENT) public void getSubBlocks(Item item, CreativeTabs tab, List list) { // Blockと同様。 list.add(new ItemStack(item, 1, 0)); } @Override @SideOnly(Side.CLIENT) public void registerBlockIcons(IIconRegister register) { // Blockと同様。 blockIcon = register.registerIcon(this.getTextureName()); } @Override public boolean func_149851_a(World world, int x, int y, int z, boolean isRemote) { return true; } @Override public boolean func_149852_a(World world, Random random, int x, int y, int z) { return world.rand.nextFloat() 0.45D; } @Override public void func_149853_b(World world, Random random, int x, int y, int z) { this.func_149879_c(world, x, y, z, random); } } WorldGenAluminiumTrees.java +長いので囲みます package tutorial.aluminiummod; import java.util.Random; import net.minecraft.block.Block; import net.minecraft.block.BlockSapling; import net.minecraft.block.material.Material; import net.minecraft.init.Blocks; import net.minecraft.util.Direction; import net.minecraft.world.World; import net.minecraft.world.gen.feature.WorldGenAbstractTree; import net.minecraftforge.common.util.ForgeDirection; public class WorldGenAluminiumTrees extends WorldGenAbstractTree { private final int minTreeHeight; private final boolean vinesGrow; private final int metaWood; private final int metaLeaves; public WorldGenAluminiumTrees(boolean doBlockNotify) { this(doBlockNotify, 4, 0, 0, false); } public WorldGenAluminiumTrees(boolean doBlockNotify, int minTreeHeight, int metaWood, int metaLeaves, boolean vinesGrow) { super(doBlockNotify); this.minTreeHeight = minTreeHeight; this.metaWood = metaWood; this.metaLeaves = metaLeaves; this.vinesGrow = vinesGrow; } @Override public boolean generate(World world, Random random, int x, int y, int z) { int l = random.nextInt(3) + minTreeHeight; if (y 1 || y + l + 1 256) return false; byte b0; int k1; Block block; for (int iy = y; iy = y + 1 + l; ++iy) { b0 = 1; if (iy == y) { b0 = 0; } if (iy = y + 1 + l - 2) { b0 = 2; } for (int ix = x - b0; ix = x + b0; ++ix) { for (int iz = z - b0; iz = z + b0; ++iz) { if (iy 0 || iy = 256) return false; block = world.getBlock(ix, iy, iz); if (!this.isReplaceable(world, ix, iy, iz)) return false; } } } Block block2 = world.getBlock(x, y - 1, z); boolean isSoil = block2.canSustainPlant(world, x, y - 1, z, ForgeDirection.UP, (BlockSapling) AluminiumMod.saplingAluminium); if (!isSoil || y = 256 - l - 1) return false; block2.onPlantGrow(world, x, y - 1, z, x, y, z); b0 = 3; byte b1 = 0; int l1; int i2; int j2; int i3; for (k1 = y - b0 + l; k1 = y + l; ++k1) { i3 = k1 - (y + l); l1 = b1 + 1 - i3 / 2; for (i2 = x - l1; i2 = x + l1; ++i2) { j2 = i2 - x; for (int k2 = z - l1; k2 = z + l1; ++k2) { int l2 = k2 - z; if (Math.abs(j2) != l1 || Math.abs(l2) != l1 || random.nextInt(2) != 0 i3 != 0) { Block block1 = world.getBlock(i2, k1, k2); if (block1.isAir(world, i2, k1, k2) || block1.isLeaves(world, i2, k1, k2)) { this.setBlockAndNotifyAdequately(world, i2, k1, k2, AluminiumMod.leavesAluminium, metaLeaves); } } } } } for (k1 = 0; k1 l; ++k1) { block = world.getBlock(x, y + k1, z); if (block.isAir(world, x, y + k1, z) || block.isLeaves(world, x, y + k1, z)) { setBlockAndNotifyAdequately(world, x, y + k1, z, AluminiumMod.logAluminium, metaWood); if (vinesGrow k1 0) { if (random.nextInt(3) 0 world.isAirBlock(x - 1, y + k1, z)) { this.setBlockAndNotifyAdequately(world, x - 1, y + k1, z, Blocks.vine, 8); } if (random.nextInt(3) 0 world.isAirBlock(x + 1, y + k1, z)) { this.setBlockAndNotifyAdequately(world, x + 1, y + k1, z, Blocks.vine, 2); } if (random.nextInt(3) 0 world.isAirBlock(x, y + k1, z - 1)) { this.setBlockAndNotifyAdequately(world, x, y + k1, z - 1, Blocks.vine, 1); } if (random.nextInt(3) 0 world.isAirBlock(x, y + k1, z + 1)) { this.setBlockAndNotifyAdequately(world, x, y + k1, z + 1, Blocks.vine, 4); } } } } if (vinesGrow) { for (k1 = y - 3 + l; k1 = y + l; ++k1) { i3 = k1 - (y + l); l1 = 2 - i3 / 2; for (i2 = x - l1; i2 = x + l1; ++i2) { for (j2 = z - l1; j2 = z + l1; ++j2) { if (world.getBlock(i2, k1, j2).isLeaves(world, i2, k1, j2)) { if (random.nextInt(4) == 0 world.getBlock(i2 - 1, k1, j2).isAir(world, i2 - 1, k1, j2)) { this.growVines(world, i2 - 1, k1, j2, 8); } if (random.nextInt(4) == 0 world.getBlock(i2 + 1, k1, j2).isAir(world, i2 + 1, k1, j2)) { this.growVines(world, i2 + 1, k1, j2, 2); } if (random.nextInt(4) == 0 world.getBlock(i2, k1, j2 - 1).isAir(world, i2, k1, j2 - 1)) { this.growVines(world, i2, k1, j2 - 1, 1); } if (random.nextInt(4) == 0 world.getBlock(i2, k1, j2 + 1).isAir(world, i2, k1, j2 + 1)) { this.growVines(world, i2, k1, j2 + 1, 4); } } } } } if (random.nextInt(5) == 0 l 5) { for (k1 = 0; k1 2; ++k1) { for (i3 = 0; i3 4; ++i3) { if (random.nextInt(4 - k1) == 0) { l1 = random.nextInt(3); this.setBlockAndNotifyAdequately(world, x + Direction.offsetX[Direction.rotateOpposite[i3]], y + l - 5 + k1, z + Direction.offsetZ[Direction.rotateOpposite[i3]], Blocks.cocoa, l1 2 | i3); } } } } } return true; } @Override protected boolean isReplaceable(World world, int x, int y, int z) { Block block = world.getBlock(x, y, z); return block.isAir(world, x, y, z) || block.isLeaves(world, x, y, z) || block.isWood(world, x, y, z) || this.func_150523_a(block); } @Override protected boolean func_150523_a(Block block) { return block.getMaterial() == Material.air || block.getMaterial() == Material.leaves || block == Blocks.grass || block == Blocks.dirt || block == Blocks.log || block == Blocks.log2 || block == Blocks.sapling || block == Blocks.vine; } private void growVines(World world, int x, int y, int z, int length) { this.setBlockAndNotifyAdequately(world, x, y, z, Blocks.vine, length); int i1 = 4; while (true) { --y; if (!world.getBlock(x, y, z).isAir(world, x, y, z) || i1 = 0) { return; } this.setBlockAndNotifyAdequately(world, x, y, z, Blocks.vine, length); --i1; } } } BlockAluminiumLog.java +長いので囲みます package tutorial.aluminiummod; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; import net.minecraft.block.BlockLog; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; public class BlockAluminiumLog extends BlockLog { private IIcon[] iicon = new IIcon[2]; public BlockAluminiumLog() { super(); this.setCreativeTab(CreativeTabs.tabBlock); this.setHardness(2.0F); this.setStepSound(soundTypeWood); } @Override public int getRenderType() { return 31; } @Override public int onBlockPlaced(World world, int x, int y, int z, int side, float posX, float posY, float posZ, int meta) { // 設置された方向に応じてメタデータを設定する。 int metaType = meta 3; byte direction = 0; switch (side) { case 0 case 1 direction = 0; break; case 2 case 3 direction = 8; break; case 4 case 5 direction = 4; } return metaType | direction; } @Override @SideOnly(Side.CLIENT) public IIcon getIcon(int side, int meta) { int k = meta 12; int l = meta 3; return k == 0 (side == 1 || side == 0) ? this.getTopIcon(l) (k == 4 (side == 5 || side == 4) ? this.getTopIcon(l) (k == 8 (side == 2 || side == 3) ? this.getTopIcon(l) this.getSideIcon(l))); } @Override public int damageDropped(int meta) { return meta 3; } @Override @SideOnly(Side.CLIENT) protected IIcon getSideIcon(int meta) { return this.iicon[1]; } @Override @SideOnly(Side.CLIENT) protected IIcon getTopIcon(int meta) { return this.iicon[0]; } @Override @SideOnly(Side.CLIENT) public void registerBlockIcons(IIconRegister iicon) { this.iicon[0] = iicon.registerIcon(this.getTextureName() + "_top"); this.iicon[1] = iicon.registerIcon(this.getTextureName() + "_side"); } @Override protected ItemStack createStackedBlock(int meta) { return new ItemStack(Item.getItemFromBlock(this), 1, meta 3); } @Override public void breakBlock(World world, int x, int y, int z, Block block, int meta) { // 周囲の葉ブロックの消滅を始める。 byte b0 = 4; int i1 = b0 + 1; if (!world.checkChunksExist(x - i1, y - i1, z - i1, x + i1, y + i1, z + i1)) return; for (int ix = -b0; ix = b0; ++ix) { for (int iy = -b0; iy = b0; ++iy) { for (int iz = -b0; iz = b0; ++iz) { Block block1 = world.getBlock(x + ix, y + iy, z + iz); if (block1.isLeaves(world, x + ix, y + iy, z + iz)) { block1.beginLeavesDecay(world, x + ix, y + iy, z + iz); } } } } } @Override public boolean canSustainLeaves(IBlockAccess world, int x, int y, int z) { return true; } @Override public boolean isWood(IBlockAccess world, int x, int y, int z) { return true; } } BlockAluminiumLeaves.java +長いので囲みます package tutorial.aluminiummod; import java.util.ArrayList; import java.util.Random; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; import net.minecraft.block.BlockLeaves; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; import net.minecraft.world.ColorizerFoliage; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.IShearable; public class BlockAluminiumLeaves extends BlockLeaves implements IShearable { protected boolean isFancy; protected IIcon[] iicon = new IIcon[2]; int[] array; public BlockAluminiumLeaves() { super(); this.setTickRandomly(true); this.setCreativeTab(CreativeTabs.tabDecorations); this.setHardness(0.2F); this.setLightOpacity(1); this.setStepSound(soundTypeGrass); } @Override @SideOnly(Side.CLIENT) public int getBlockColor() { double d0 = 0.5D; double d1 = 1.0D; return ColorizerFoliage.getFoliageColor(d0, d1); } @Override @SideOnly(Side.CLIENT) public int getRenderColor(int color) { return ColorizerFoliage.getFoliageColorBasic(); } @Override @SideOnly(Side.CLIENT) public int colorMultiplier(IBlockAccess iBlockAccess, int x, int y, int z) { // バイオームの境目である程度スムーズになるよう、周囲9ブロックのバイオームから平均を求めている。 int ir = 0; int ig = 0; int ib = 0; for (int iz = -1; iz = 1; ++iz) { for (int ix = -1; ix = 1; ++ix) { int color = iBlockAccess.getBiomeGenForCoords(x + ix, z + iz).getBiomeFoliageColor(x + ix, y, z + iz); ir += (color 16711680) 16; ig += (color 65280) 8; ib += color 255; } } return (ir / 9 255) 16 | (ig / 9 255) 8 | ib / 9 255; } @Override public void breakBlock(World world, int x, int y, int z, Block block, int meta) { // 周囲の葉ブロックの消滅を始める。 byte b0 = 1; int i1 = b0 + 1; if (world.checkChunksExist(x - i1, y - i1, z - i1, x + i1, y + i1, z + i1)) { for (int j1 = -b0; j1 = b0; ++j1) { for (int k1 = -b0; k1 = b0; ++k1) { for (int l1 = -b0; l1 = b0; ++l1) { Block block1 = world.getBlock(x + j1, y + k1, z + l1); if (block1.isLeaves(world, x + j1, y + k1, z + l1)) { block1.beginLeavesDecay(world, x + j1, y + k1, z + l1); } } } } } } @Override public void updateTick(World world, int x, int y, int z, Random random) { if (world.isRemote) return; int meta = world.getBlockMetadata(x, y, z); // メタデータの二進数四桁目が0(周囲で原木/葉が破壊されていない)か、 // 三桁目が0以外(プレイヤーに設置されたもの)なら消滅させない。 if ((meta 8) == 0 || (meta 4) != 0) return; // 周囲のブロックを調査し、葉の消滅を抑えるブロック(原木)がなければ消滅させる。 byte b4 = 4; int i5 = b4 + 1; byte b32 = 32; int i1024 = b32 * b32; int i16 = b32 / 2; if (array == null) { array = new int[b32 * b32 * b32]; } int l1; if (world.checkChunksExist(x - i5, y - i5, z - i5, x + i5, y + i5, z + i5)) { for (int ix = -b4; ix = b4; ++ix) { for (int iy = -b4; iy = b4; ++iy) { for (int iz = -b4; iz = b4; ++iz) { Block block = world.getBlock(x + ix, y + iy, z + iz); if (!block.canSustainLeaves(world, x + ix, y + iy, z + iz)) { if (block.isLeaves(world, x + ix, y + iy, z + iz)) { array[(ix + i16) * i1024 + (iy + i16) * b32 + iz + i16] = -2; } else { array[(ix + i16) * i1024 + (iy + i16) * b32 + iz + i16] = -1; } } else { array[(ix + i16) * i1024 + (iy + i16) * b32 + iz + i16] = 0; } } } } for (l1 = 1; l1 = 4; ++l1) { for (int ix = -b4; ix = b4; ++ix) { for (int iy = -b4; iy = b4; ++iy) { for (int iz = -b4; iz = b4; ++iz) { if (array[(ix + i16) * i1024 + (iy + i16) * b32 + iz + i16] == l1 - 1) { if (array[(ix + i16 - 1) * i1024 + (iy + i16) * b32 + iz + i16] == -2) { array[(ix + i16 - 1) * i1024 + (iy + i16) * b32 + iz + i16] = l1; } if (array[(ix + i16 + 1) * i1024 + (iy + i16) * b32 + iz + i16] == -2) { array[(ix + i16 + 1) * i1024 + (iy + i16) * b32 + iz + i16] = l1; } if (array[(ix + i16) * i1024 + (iy + i16 - 1) * b32 + iz + i16] == -2) { array[(ix + i16) * i1024 + (iy + i16 - 1) * b32 + iz + i16] = l1; } if (array[(ix + i16) * i1024 + (iy + i16 + 1) * b32 + iz + i16] == -2) { array[(ix + i16) * i1024 + (iy + i16 + 1) * b32 + iz + i16] = l1; } if (array[(ix + i16) * i1024 + (iy + i16) * b32 + (iz + i16 - 1)] == -2) { array[(ix + i16) * i1024 + (iy + i16) * b32 + (iz + i16 - 1)] = l1; } if (array[(ix + i16) * i1024 + (iy + i16) * b32 + iz + i16 + 1] == -2) { array[(ix + i16) * i1024 + (iy + i16) * b32 + iz + i16 + 1] = l1; } } } } } } } l1 = array[i16 * i1024 + i16 * b32 + i16]; if (l1 = 0) { world.setBlockMetadataWithNotify(x, y, z, meta 7, 4); } else { this.removeLeaves(world, x, y, z); } } @Override @SideOnly(Side.CLIENT) public void randomDisplayTick(World world, int x, int y, int z, Random random) { // 水を滴らせる? if (world.canLightningStrikeAt(x, y + 1, z) !World.doesBlockHaveSolidTopSurface(world, x, y - 1, z) random.nextInt(15) == 1) { double dx = x + random.nextFloat(); double dy = y - 0.05D; double dz = z + random.nextFloat(); world.spawnParticle("dripWater", dx, dy, dz, 0.0D, 0.0D, 0.0D); } } private void removeLeaves(World world, int x, int y, int z) { // ドロップさせ、空気ブロックに置き換える。 this.dropBlockAsItem(world, x, y, z, world.getBlockMetadata(x, y, z), 0); world.setBlockToAir(x, y, z); } @Override public int quantityDropped(Random random) { return random.nextInt(20) == 0 ? 1 0; } @Override public Item getItemDropped(int meta, Random random, int fortune) { return Item.getItemFromBlock(AluminiumMod.saplingAluminium); } @Override public void dropBlockAsItemWithChance(World world, int x, int y, int z, int meta, float chance, int par7) { super.dropBlockAsItemWithChance(world, x, y, z, meta, 1.0f, par7); } @Override protected void func_150124_c(World world, int x, int y, int z, int meta, int chance) {} @Override protected int func_150123_b(int meta) { return 20; } @Override public boolean isOpaqueCube() { return !isFancy; } @Override @SideOnly(Side.CLIENT) public IIcon getIcon(int side, int meta) { return iicon[isFancy ? 0 1]; } @Override @SideOnly(Side.CLIENT) public void setGraphicsLevel(boolean isFancy) { this.isFancy = isFancy; } @Override protected ItemStack createStackedBlock(int meta) { return new ItemStack(Item.getItemFromBlock(this), 1, 0); } @Override public String[] func_150125_e() { return null; } @Override @SideOnly(Side.CLIENT) public boolean shouldSideBeRendered(IBlockAccess iBlockAccess, int x, int y, int z, int side) { Block block = iBlockAccess.getBlock(x, y, z); // 処理優先で隣が同じブロックだったらfalse。 return !isFancy block == this ? false super.shouldSideBeRendered(iBlockAccess, x, y, z, side); } @Override public boolean isShearable(ItemStack item, IBlockAccess world, int x, int y, int z) { return true; } @Override public ArrayList ItemStack onSheared(ItemStack item, IBlockAccess world, int x, int y, int z, int fortune) { ArrayList ItemStack ret = new ArrayList ItemStack (); ret.add(new ItemStack(this, 1, world.getBlockMetadata(x, y, z) 3)); return ret; } @Override public void beginLeavesDecay(World world, int x, int y, int z) { int meta = world.getBlockMetadata(x, y, z); if ((meta 8) == 0) { world.setBlockMetadataWithNotify(x, y, z, meta | 8, 4); } world.setBlockMetadataWithNotify(x, y, z, world.getBlockMetadata(x, y, z) | 8, 4); } @Override public boolean isLeaves(IBlockAccess world, int x, int y, int z) { return true; } @Override public ArrayList ItemStack getDrops(World world, int x, int y, int z, int meta, int fortune) { ArrayList ItemStack ret = new ArrayList ItemStack (); int chance = this.func_150123_b(meta); if (fortune 0) { chance -= 2 fortune; if (chance 10) chance = 10; } if (world.rand.nextInt(chance) == 0) ret.add(new ItemStack(this.getItemDropped(meta, world.rand, fortune), 1, this.damageDropped(meta))); chance = 200; if (fortune 0) { chance -= 10 fortune; if (chance 40) chance = 40; } this.captureDrops(true); this.func_150124_c(world, x, y, z, meta, chance); ret.addAll(this.captureDrops(false)); return ret; } @Override @SideOnly(Side.CLIENT) public void registerBlockIcons(IIconRegister register) { iicon[0] = register.registerIcon(this.getTextureName()); iicon[1] = register.registerIcon(this.getTextureName() + "_opaque"); } } ItemAluminiumLeaves.java package tutorial.aluminiummod; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; import net.minecraft.block.BlockLeaves; import net.minecraft.item.ItemLeaves; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; public class ItemAluminiumLeaves extends ItemLeaves { protected final Block leaves; public ItemAluminiumLeaves(Block block) { super((BlockLeaves) block); this.leaves = block; this.setMaxDamage(0); this.setHasSubtypes(true); } @Override public int getMetadata(int meta) { // 設置時は二進数三桁目が1になる。 return meta | 4; } @Override public String getUnlocalizedName(ItemStack itemStack) { return leaves.getUnlocalizedName(); } @Override @SideOnly(Side.CLIENT) public IIcon getIconFromDamage(int meta) { return leaves.getIcon(0, meta); } @Override @SideOnly(Side.CLIENT) public int getColorFromItemStack(ItemStack itemStack, int pass) { return leaves.getRenderColor(itemStack.getItemDamage()); } } 解説 Block +長いので囲みます Block setTickRandomly(boolean needsRandomTick) trueに設定すると、ランダムでupdateTickが呼ばれるようになる。 植物の成長判定や葉の消滅などに使う。 void setBlockBounds(float minX, float minY, float minZ, float maxX, float maxY, float maxZ) ブロックの大きさを設定する。 カーソルがあったかどうかの判定や、合わせたときの枠線の描画に使われる。 boolean canPlaceBlockAt(World world, int x, int y, int z) ブロックを設置できるかを判定する。 void onNeighborBlockChange(World world, int x, int y, int z, Block block) 隣接するブロックが更新された時の処理。 boolean canBlockStay(World world, int x, int y, int z) ブロックがとどまれるかどうか。 AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) 当たり判定を返す。 BlockではAxisAlignedBB.getBoundingBox(x + minX, y + minY, z + minZ, x + maxX, y + maxY, z + maxZ)を返している。 このメソッドをオーバーライドすれば当たり判定を変更できる。 boolean isOpaqueCube() 不透明なブロックかどうかを返す。 boolean renderAsNormalBlock() 通常のブロックのように描画するかどうかを返す。 柵や壁がつながるかどうかの判定にも使われる。 int getRenderType() レンダ―タイプを返す。 通常は0。 苗木や花、キノコなどは1。 原木、干草の俵などは31。 1を返すとTileEntityの設定などが適用される。 void updateTick(World world, int x, int y, int z, Random random) ブロックのアップデート時の処理。 needsRandomTickがtrueの時はランダムに呼ばれる。 falseだと何tick後に呼び出すなどの処理が可能。 int onBlockPlaced(World world, int x, int y, int z, int side, float posX, float posY, float posZ, int meta) ブロックが設置された時の処理。 ItemStack createStackedBlock(int meta) メタデータを反映してItemStackを生成し返す。 void breakBlock(World world, int x, int y, int z, Block block, int meta) ブロックが破壊された時の処理。 boolean canSustainLeaves(IBlockAccess world, int x, int y, int z) 葉を維持させられるブロックかどうかを返す。 boolean isWood(IBlockAccess world, int x, int y, int z) 原木かどうかを返す。 木の生成時の判定に使う。 Block setLightOpacity(int lightOpacity) 光の透過度を設定する。 0で不透過。1で完全に透過。 int getBlockColor() ブロックの色を返す。 int getRenderColor(int color) 描画するときの色を返す。 インベントリ内での描画などに使う。 int colorMultiplier(IBlockAccess iBlockAccess, int x, int y, int z) ブロックを描画するときの色の係数を返す。 void randomDisplayTick(World world, int x, int y, int z, Random random) クライアントで描画されるときにランダムで呼ばれる。 int quantityDropped(Random random) ドロップ数を返す。 Item getItemDropped(int meta, Random random, int fortune) ドロップするアイテムを返す。 void dropBlockAsItemWithChance(World world, int x, int y, int z, int meta, float chance, int par7) ブロックをドロップさせる。 boolean shouldSideBeRendered(IBlockAccess iBlockAccess, int x, int y, int z, int side) 引数の面を描画するかどうか。 引数の座標はメソッドを呼ばれたブロックではなく、その隣にあるブロック。 Blockでは、ブロックの大きさが通常より小さいでないか、引数の座標のブロックが不透明でないならtrueを返す。 void beginLeavesDecay(World world, int x, int y, int z) 葉の消滅を始める。 boolean isLeaves(IBlockAccess world, int x, int y, int z) 葉かどうかを返す。 ArrayList ItemStack getDrops(World world, int x, int y, int z, int meta, int fortune) ドロップアイテムのリストを返す。 BlockBush boolean canPlaceBlockOn(Block block) 引数のブロックの上に設置が可能かどうか。 void checkAndDropBlock(World world, int x, int y, int z) 設置されている状況が保てるかどうか判定し、保てないならドロップさせる。 BlockSapling void func_149879_c(World world, int x, int y, int z, Random random) 苗木を成長させる処理。 void func_149878_d(World world, int x, int y, int z, Random random) 木を生成する処理。 boolean func_149880_a(World world, int x, int y, int z, int type) 引数の座標のブロックが同じ種類の苗木かどうか。 ダークオーク・松などの生成に使っている。 EnumPlantType 植物の植え方を表すenum。 Plains 苗木や草、花など。 草・土・耕された土に植えられる。 ForgeDirection 方向を表すenum。 UP 上方向。 AxisAlignedBB ブロックの当たり判定などを保持するクラス。 TerrainGen 生成に関するEventを呼び出すクラス。 saplingGrowTree SaplingGrowTreeEventを呼び出す。 IPlantable 植物のインターフェース。 EnumPlantType getPlantType(IBlockAccess world, int x, int y, int z) 植物の植え方によってenumを返す。 Block getPlant(IBlockAccess world, int x, int y, int z) 引数の座標にある植物を返す。 基本的にはthisでよい。 int getPlantMetadata(IBlockAccess world, int x, int y, int z) 植物のメタデータを返す。 IGrowable 骨粉が使用できるブロックのインターフェース。 boolean func_149851_a(World world, int x, int y, int z, boolean isRemote) 骨粉が使用できるかどうかを返す。 boolean func_149852_a(World world, Random random, int x, int y, int z) 成長させるかどうかを返す。 void func_149853_b(World world, Random random, int x, int y, int z) 成長させる処理。 BlockRotatedPillar IIcon getSideIcon(int meta) 横の面のアイコンを返す。 IIcon getTopIcon(int meta) 上下面のアイコンを返す。 ColorizerFoliage 葉や草などの色を扱うクラス。 int getFoliageColor(double temperature, double humidity) 気温・湿度から色を生成して返す。 int getFoliageColorBasic() 基本の色を返す。 4764952(0x48A518, RGB (72,181,24))。 BlockLeaves void func_150124_c(World world, int x, int y, int z, int meta, int chance) リンゴのドロップに使うメソッド。 int func_150123_b(int meta) 苗木のドロップ確率を返す。 void setGraphicsLevel(boolean isFancy) 描画優先/処理優先の設定を反映する。 String[] func_150125_e() 木の種類名の配列を返す。 void removeLeaves(World world, int x, int y, int z) 引数の座標にあるブロックをドロップして破壊する。 privateなのでBlockAluminiumLeavesでは新しく実装していることになる。 IShearable ハサミで回収できるブロックのインターフェース。 boolean isShearable(ItemStack item, IBlockAccess world, int x, int y, int z) ハサミで回収できるかどうかを返す。 ArrayList ItemStack onSheared(ItemStack item, IBlockAccess world, int x, int y, int z, int fortune) ハサミで回収された時の処理。 ハサミで回収した時のドロップアイテムのリストを返す。 使用例 星の樹MODは木のカスタマイズ機能の影響で非常にわかりにくくなっているため、使用例は載せません。 Beta 1.0.0以前のコードは参考になるかもしれません。 コメント この項目に関する質問などをどうぞ。 左のメニューでTileEntityの追加を押すとこのページに来てしまいます。 - 名無しさん 2016-01-09 22 38 31 申し訳ありません。訂正いたしました。 - Tom Kate 2016-01-10 08 41 18 1.7.10で丸ごとコピーしてみたのですが、preInitのLeavesのところで落ちてしまいます。 - 名無しさん 2016-04-30 05 28 57 ご報告ありがとうございます。修正しました。 - 赤砂蛇凪浜 2016-04-30 16 13 34 葉のテクスチャは新しい文で指定する必要があるのでしょうか - 名無しさん 2016-05-20 16 43 05 テクスチャの指定に関する部分はいくつかあるため、どこについてなのかもう少し詳しくお願いします。 - 赤砂蛇凪浜 2016-05-20 17 28 58 葉のブロックのテクスチャ(描画設定で切り替わったり)です。例えばここのコードを丸ごと持ってきた場合、画像ファイルの名前や位置次第でテクスチャは表示されうるのでしょうか。すみません枝間違えました - ポン酢 2016-05-20 20 44 34 入力ミスのようですので、コメントは片方削除させていただきます。チュートリアルに不備があり、葉のテクスチャの指定がうまくできていなかったので修正しました。AluminiumMod.javaおよびBlockAluminiumLeaves.javaに変更がありますのでご確認ください。ご迷惑をおかけして申し訳ありませんでした。解説がわかりにくければ、またご質問いただけるとありがたいです。 - 赤砂蛇凪浜 2016-05-22 13 42 04 同じIDでいくつかの原木ブロックを追加するには、どのようにすれば良いのでしょうか。 - 名無しさん 2016-06-17 23 31 47 「メタデータを持つブロックの追加」に記載している方法で、getSubBlocksなどをオーバーライドしてテクスチャの指定を少し変更すればできます。ただし、原木の場合は向きをメタデータで記録しているので、一つのIDで追加できるのは4種類までです。バニラのコードや、(カスタム機能の影響で少しわかりにくくなっていますが)星の樹MODのソースコードも見てみてください。返信が遅くなってしまい、申し訳ありません。 - 赤砂蛇凪浜 2016-06-25 10 48 37 ありがとうございます! - 名無しさん 2016-06-25 21 53 03 返信するとこ間違えました... - 名無しさん 2016-06-25 21 53 43 このソースコードは1.10でも使用することができますか? - 名無しさん 2016-10-06 00 48 58 こちらのチュートリアルは記載の通り1.7.10版のものです。1.8以降は大きくコーディングが変更されておりますので使うことはできません。 - Tom Kate 2016-10-06 23 07 20 名前
https://w.atwiki.jp/senmetu-tanikazu/pages/8.html
日本語MOD導入方法を説明します。 鯖主はwinXPなんで、winXPの方法で、やらせていただきます。 諸注意:7-zipをいれたことを前提に説明していきます。 手順1 スタートボタンを押して、「ファイル名を指定して実行」 そこで「%appdata%」と入力してOKを押す。 その後、フォルダがたくさん出てくるので、「.minecraft」を開く。 手順2 このような画面が出てくると思います。 「bin」フォルダがあれば問題なく導入できます。 「bin」フォルダを開きましょう。 手順3 「bin」フォルダの中にある minecraft.jar( .jarが付いていない場合もあります。)を 右クリックして、7-zipで開いてください。 手順4 まずは、NihongoMODとModloader(Modloaderはクリックすればそのままダウンロードできます) をダウンロードしてきて、それぞれも7-zipで開きます。 手順5 minecraft.jarに、Modloader , NihongoMODの順に全て入れていきます。 手順6 mineccraft.jarの中に、「META-INF」というフォルダがあるはずです。(バニラの場合) それを右クリック⇒削除しましょう。 ※出来ない場合などは、バージョンが合ってるかきちんと確認をしてください。
https://w.atwiki.jp/kurenainokiai/pages/81.html
V5チューンアップ比較はこちら:V5チューンアップ CoMoDo 搭乗可能 LV 31 価格 89,000 Mito +クーポン(クイックサービス100回) 燃費/積載量 1.300/300 モデル Audi / TT coupe 駆動形式 4WD/FF INVENTION 搭乗可能 LV 31 価格 98,000 Mito 燃費/積載量 1.430/330 モデル LAND ROVER / DISCOVERY HSE 駆動形式 4WD ROTARY 搭乗可能 LV 34 価格 120,000 Mito +クーポン(カーチェイス150回) 燃費/積載量 1.235/285 モデル MAZDA / RX-7 TypeRS(FD3S) 駆動形式 FR Above 搭乗可能 LV 34 価格 125,000 Mito 燃費/積載量 1.300/300 モデル TOYOTA / Supra(JZA80) 駆動形式 FR MONSTER 搭乗可能 LV 34 価格 100,000 Mito +クーポン(アンダーシティミッション挑戦10回) 燃費/積載量 1.235/285 モデル Dodge / Ram Bigfoot 駆動形式 4WD FAIRPLAY 搭乗可能 LV 34 価格 128,000 Mito 燃費/積載量 / モデル NISSAN / Fairlady Z(CBA-Z33) 駆動形式 FR
https://w.atwiki.jp/akasatanahama/pages/68.html
概要 新しい食料アイテムを追加する。 食べたときにポーションエフェクトを確率で付与することもできる。 ソースコード AluminiumMod.java package tutorial.aluminiummod; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.registry.GameRegistry; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraft.item.ItemFood; import net.minecraft.potion.Potion; @Mod(modid = AluminiumMod.MODID, name = AluminiumMod.MODNAME, version = AluminiumMod.VERSION) public class AluminiumMod { public static final String MODID = "AluminiumMod"; public static final String MODNAME = "Aluminium Mod"; public static final String VERSION = "1.0.0"; public static Item foodAluminium; @EventHandler public void perInit(FMLPreInitializationEvent event) { foodAluminium = new ItemFood(5, 2.0F, false) .setPotionEffect(Potion.regeneration.id, 60, 0, 0.8F) .setCreativeTab(CreativeTabs.tabFood) .setUnlocalizedName("foodAluminium") .setTextureName("aluminiummod foodAluminium"); GameRegistry.registerItem(foodAluminium, "foodAluminium"); } } 解説 ItemFood コンストラクタ(int healAmount, float saturationModifier, boolean isWolfsFavoriteMeat) 引数は順に、満腹度回復量・隠し満腹度回復量(腹持ち)・オオカミが食べられるか ItemFood setPotionEffect(int potionId, int potionDuration, int potionAmplifier, float potionEffectProbability) 食べたときに確率でポーションエフェクトを付与する。 引数は順に、ポーションID・効果時間・効果レベル・付与される確率。 効果時間は単位が秒なので注意。 効果レベルは表示値より1少ない。(0がレベル1) 使用例 オファレンMODの回復玉を追加している部分。 回復玉は、ItemFoodを継承しているが、オーバーライドして変えている部分も多い。 +オファレンMOD OfalenModCore.java package nahama.ofalenmod; /*略*/ /** @author Akasata Nahama */ @Mod(modid = OfalenModCore.MODID, name = OfalenModCore.MODNAME, version = OfalenModCore.VERSION) public class OfalenModCore { public static final String MODID = "OfalenMod"; public static final String MODNAME = "Ofalen Mod"; public static final String VERSION = "[1.7.10]1.0.0"; /*略*/ /** 最初に行われる処理。アイテム・ブロックの追加などを行う */ @EventHandler public void preInit(FMLPreInitializationEvent event) { /*略*/ // アイテムを設定するメソッドを実行 OfalenModItemCore.registerItem(); /*略*/ } /*略*/ } OfalenModItemCore.java package nahama.ofalenmod.core; /*略*/ public class OfalenModItemCore { /*略*/ public static Item ballRecovery; /*略*/ /**アイテムを設定する*/ public static void registerItem () { /*略*/ ballRecovery = new OfalenBall(new PotionEffect[]{new PotionEffect(Potion.heal.id, 1, 0)}) .setUnlocalizedName("ballRecovery") .setTextureName("ofalenmod recovery_ball"); GameRegistry.registerItem(ballRecovery, "ballRecovery"); /*略*/ } } OfalenBall.java package nahama.ofalenmod.item; import nahama.ofalenmod.OfalenModCore; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemFood; import net.minecraft.item.ItemStack; import net.minecraft.potion.Potion; import net.minecraft.potion.PotionEffect; import net.minecraft.world.World; public class OfalenBall extends ItemFood { /**付与するポーション効果の配列*/ private final PotionEffect[] effects; /**新規コンストラクター。ポーション効果の配列を受け取る。*/ public OfalenBall(PotionEffect[] effects) { super(0, 0.0F, false); this.effects = effects; this.setCreativeTab(OfalenModCore.tabOfalen); } /**食べるのにかかる時間を返す。(通常よりも少し早い) * @return 20*/ @Override public int getMaxItemUseDuration(ItemStack itemStack) { return 20; } /**右クリックされた時の処理。ItemFoodの満腹度の判定を消している。*/ @Override public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer player) { player.setItemInUse(itemStack, this.getMaxItemUseDuration(itemStack)); return itemStack; } /**食べる時の処理。クリエイティブモードではアイテム数が減らないようにしている。また、ポーション効果も付与する。*/ /* EntityLivingBase.addPotionEffect(PotionEffect)では、効果時間を上書きしているらしい(?)ので、 * 新たにPotionEffectのオブジェクトを生成して引数として渡している。*/ @Override public ItemStack onEaten(ItemStack itemStack, World world, EntityPlayer player) { //クリエイティブモード以外ならスタックサイズを減らす。 if (!player.capabilities.isCreativeMode) { --itemStack.stackSize; } //つけるポーション効果の数だけ繰り返す。 for (int i = 0; i effects.length; i ++) { //サーバー側の処理で、情報が正常なら処理を続ける。 if (!world.isRemote effects[i] != null effects[i].getPotionID() 0) { //即時回復なら、 if (effects[i].getPotionID() == Potion.heal.id) { //ID・効果時間を固定して、 PotionEffect effect = new PotionEffect(Potion.heal.id, 1, effects[i].getAmplifier()); //プレイヤーに付与。 player.addPotionEffect(effect); //即時回復以外なら、 } else { //効果時間のみ固定して、 PotionEffect effect = new PotionEffect(effects[i].getPotionID(), effects[i].getDuration(), effects[i].getAmplifier()); //プレイヤーに付与。 player.addPotionEffect(effect); } } } world.playSoundAtEntity(player, "random.burp", 0.5F, world.rand.nextFloat() * 0.1F + 0.9F); return itemStack; } } コメント この項目に関する質問などをどうぞ。 ItemFood setPotionEffect の引数が (int, int, int, float) ではなく (string) になっているのですが、なぜですか? - あるふぁ 2017-05-20 14 48 36 自己解決しました。 - あるふぁ 2017-05-20 14 51 35 金リンゴのように、満腹度MAXの時でも食べられるものはどう作るのですか? - あるふぁ 2017-05-20 14 54 50 こちらも解決しました。setAlwaysEdible()を使いました。 - あるふぁ 2017-05-20 18 57 23 名前
https://w.atwiki.jp/lafe/pages/37.html
Proxydomo 最新バージョンダウンロード https //github.com/amate/Proxydomo/releases/latest 古いバージョン https //github.com/amate/Proxydomo/releases http //sdrv.ms/17bLtVM ■はじめに このソフトはローカルで動くプロクシフィルタリングソフトです 作成にあたりオープンソースのProximodoを使って作られています。 windows10 64bitで動作を確認 たぶん xp / vista / 7 / 8.1 でも動くはず ■使い方 起動して 127.0.0.1 6060(プロクシポートに表示されてる数値)をプロクシとして指定すると プロクシフィルタとして機能します。 詳しい使い方は Proxomitron などを参考にしてください。 $LSTの指定方法は listsフォルダ以下にあるテキストから拡張子を消したものです ※例 lists\Kill.txt - $LST(Kill) ■Windowsストアアプリで利用する場合 Windowsストアアプリはセキュリティ上の理由でループバックアドレス(127.0.0.1)へのアクセスが許可されていません ストアアプリからProxydomoへの接続を許可するためには Windows ストア アプリをループバック(localhost)に接続する を参考に Windows 8 AppContainer Loopback Utility などを利用して明示的にアクセスを許可してください ■Proxomitronからフィルタを移行するとき Proxomitronの"HTML Webページ・フィルタ"で、フィルタリストをマウスドラッグで一気に選択した後、 右クリック- "フィルタをクリップボードへエクスポート"した後、 Proxydomoのフィルタ管理ウィンドウで"クリップボードからインポート"を実行すれば、フィルタを一括でインポートできます "HTTPヘッダ・フィルタ"も同様に移行できます ブロックリストは"[%aa][%ab][%ac]"などのエンコードがされている場合、元の文字列にデコードして、ファイルの文字コードをUTF8として保存してください 一部実装していないコマンド、仕様変更があるので一度 詳細 に目を通してください ■既知のバグ 一部実装していないコマンドがあります($ADDLSTBOXなど) SSLフィルタリング有効時、SSLを通さないWebSocketを切断してしまう Content-Encoding sdch なページを解凍できない 一部のdeflate圧縮されたページを解凍できない 例 deflate-http (AKA zlib format) Chromium系列のブラウザでSSLフィルタリングが利用できない ■免責 作者(原著者&改変者)は、このソフトによって生じた如何なる損害にも、 修正や更新も、責任を負わないこととします。 使用にあたっては、自己責任でお願いします。 何かあれば下記のURLにあるメールフォームにお願いします。 http //www31.atwiki.jp/lafe/pages/33.html ■著作権表示 Copyright (C) 2004 Antony BOUCHER Copyright (C) 2013-2018 amate 画像の一部に「VS2010ImageLibrary」の一部を使用しています。 ■ソース https //github.com/amate/Proxydomo ■更新履歴 v1.109 http //local.ptron/ へのアクセスができなくなっていたバグを修正 #62 http //local.ptron/blocklistinfo/ へのアクセスでCPUを過度に消費してしまうバグを修正 #63 http //local.ptron への$JUMPが$RDIR相当になっていたのを再修正 #60 v1.108 local.ptronへの$JUMPが$RDIR相当になっていたのを修正 #60 受信ヘッダフィルターで$TYPEが使えなくなっていたのを修正 #58 あまりテストしていないので、今の環境で安定しているなら更新を保留した方がいいかもしれない v1.107 local.ptronへのリクエスト時、ファイルの拡張子から正確なContent-Typeを返すようにした local.ptronで日本語のファイルをリクエストされても返せるようにした v1.106 Content-Typeは受信ヘッダフィルターで処理されたものを見るようにした wolfSSLのバージョンを v3.15.3へ更新 v1.105 クリップボードからフィルターのインポート時にインポート元のテキストが規定のフォーマットでないと正常にインポートできなかったのを修正 クリップボードからフィルターのインポート時にクリップボード内のテキストとしてunicodeを優先するようにした #54 v1.104 ブロックリストの例外指定に対応 ICUをv60に更新 v1.103 楕円曲線暗号をサポートしたサイトに繋がらないことがあるのを修正 #52 ブラウザとProxydomo間も非同期で接続を行うようにした ログウィンドウのフォントを指定できるようにした ※settings.iniに追加する [LogViewWindowFont] lfFaceName=Consolas pointSize=9 v1.102 wolfSSLをv3.12.0へ更新 サイトへの接続を非同期で行うように変更 (サイトへの接続中は切断が効かなかったのを修正) #50 v1.101 最新のSDKを入れた環境でビルドが通らないのを修正 RecentURLとConnection Monitorのカラム幅と位置を記憶するようにした フィルター編集ウィンドウとフィルターテストウィンドウのフォントを指定できるようにした ※settings.iniに追加する [FilterEditWindowFont] lfFaceName=Consolas pointSize=9 [FilterTestWindowFont] lfFaceName=Consolas pointSize=9 RecentURLのLengthのソートが機能していなかったのを修正 RecentURLのセル右ダブルクリックしたとき、ログが存在しないのに表示を切り替えていたのを修正 Content-Encoding identity なページをフィルタリングできなかったのを修正 v1.100 boostのバージョンを1.64に上げた ウェブフィルターデバッグでのhtmlハイライトをgoogle-code-prettifyを使ったものへ変更 サーバー側から送られてくる証明書が大きいと切断されるのを修正 #47 v1.99 IPv6に対応 https //ipv6.google.com/ ローカル変数を実装( _ (アンダースコア)から始まる変数の寿命はグローバルではなくローカルになります) 例 $SET(_A=\1) ローカル変数もグローバル変数と同じく、代入時に変数が展開されます v1.98 発行するサーバー証明書にsubjectAltName拡張を追加するようにした #43 #44 v1.97 local.ptronからのレスポンスヘッダも受信ヘッダフィルターにかけるようにした #39 v1.96 Visual Studio 2017でビルドするようにした Content-Encoding br を解凍できるようになった #36 #38 v1.95 サーバーから送られてくる証明書にルートCAが含まれていると接続できないことがあるのを修正 v1.94 wolfSSLのバージョンを3.10.0へ上げた AboutでwolfSSLのバージョンを確認できるようにした info.logがカレントディレクトリに作成されてしまうのを修正 オプションからログの出力レベルを変更できるようにした 起動時にinfo.logを消すようにした v1.93 置換コマンド"$DTM"を実装 受信ヘッダフィルダーでヘッダ名にURLがあるフィルターが存在すると受信ヘッダーにURLが付加されてしまうのを修正 v1.92 サーバーから送られてくるContent-Typeに空白が含まれているとバイパスされてしまうのを修正 v1.91 フィルター管理ウィンドウでスペースキーによってチェックを切り替えたとき、内部データに反映されないバグを修正 リクエストが続いてる間にフィルターリストの内容が変化した場合、リクエストが利用するフィルターリストが更新されるのではなく追加されてしまっていたのを修正 v1.90 フィルターテストウィンドウに"設定"を追加、URL・fileTypeを設定可能にした フィルター管理ウィンドウに絞り込み用のエディットボックスを追加 #34 v1.89 adblock形式のフィルタで一部マッチ時にログにマッチ表示が出なかったのを修正 オプションに"ブロックリストの利用統計を保存する"を追加 ※上記オプションの有効時に http //local.ptron/blocklistinfo/ を開くことによってブロックリスト内のパターンのマッチ回数が表示できます local.ptron/./html以下にあるフォルダ名 にアクセスすると 0byteのファイルをダウンロードしてしまうのを修正 local.ptron/./html以下にあるフォルダ名 にアクセスしたときは、そのフォルダ内にある index.html を返すようにした v1.88 ログウィンドウで、すべてのHTTPイベントのチェックを外すと すべてのログにURLが表示されなくなるのを修正 AdblockPlus形式のリストで"||"のあとドメイン形式以外の文字列があるとマッチしないバグを修正 RecentURLに local.ptronへのリクエストや、"\k"で接続を切ったURLが表示されないのを修正 RecentURLで、"\k"で接続を切ったURLは赤く表示するようにした RecentURLで、Lengthを bytes,KB,MB,GB で表示するようにした RecentURLで、URLを右ボタンダブルクリックで、そのURLでのログを表示するようにした 受信ヘッダフィルタでリダイレクトしたときRecentURLにURLが追加されないのを修正 v1.87 フィルターの内容や有効/無効が変化したときに、次のリクエストから変更を適用するようにした AdblockPlus形式のリストで要素非表示ルールに対応 ※ $ELEMENTHIDINGCSS コマンドを追加、置換テキストでのみ使えます $ELEMENTHIDINGCSS(リスト名) とすることによって、リストからURLにマッチするCSSセレクタを集め style 集めたCSSセレクタ{ display none !important; } /style 上の文字列を返します [Patterns] Name = "element hiding" Version = "" Author = "" Comment = "" Active = TRUE Multi = FALSE URL = "" Bounds = "" Limit = 128 Match = "(^(^ / head ))" Replace = "$ELEMENTHIDINGCSS(リスト名)" このようなフィルターを作成して利用してください v1.86 AdblockPlus形式のリストを読み込めるようにした ※ 1. AdblockPlus形式のリストとして読み込む場合はブロックリストの一行目が [Adblock Plus で始まっている必要があります 2. 要素非表示ルール(##を含む行)については非対応です 3. typeオプション($)については、script,image,xmlhttprequest,third-party,domain のみ対応していますが script,imageはフィルタ種別が受信ヘッダの場合でのみ機能します(レスポンスヘッダのContent-Typeを見る必要があるため) third-partyについては、URLとRefererのドメイン名を見て判定しているため、リストに ||example.com^$third-party などがあった場合、他のドメインのページから http //example.com/ へ飛ぼうとした場合にマッチしてしまいますが フィルタ種別が受信ヘッダの場合は特別にContent-Typeが"text/html"のときのみ$third-partyがマッチしないようにしています 4. WebページフィルタにもAdblockPlus形式のリストを使えますが、その場合$LSTは暗黙的に * で囲まれていることに注意してください $LST(adblockplus)は *$LST(adblockplus)* と書かれているのと同じことになります 5. WebページフィルタにAdblockPlus形式のリストを利用した場合、typeオプションはマッチした文字列ではなく、ページ自身のURL、Content-Typeを利用してマッチ判定されます(typeオプションが含まれた行は期待した動作はしないでしょう) v1.85 認証エラー時にダイアログを表示していたのをブラウザ内に情報を表示するようにし、各種操作を行えるようにした(ダイアログ形式がいい場合は、".\html\certificate_error.html"を削除してください) v1.84 フィルター編集ウィンドウを開いたままProxydomoを終了させると強制終了するバグを修正 boostのバージョンを1.60.0へ上げた CONNECTリクエストで送信ヘッダフィルターで$FILTER(false)された場合はバイパス扱いするようにした #32 v1.83 フィルター編集ウィンドウでマッチングパターンと置換するテキストの間にカーソルがあるとカーソル形状を変化させるようにした フィルター編集ウィンドウでヘッダ名のテキスト入力エリア以上に文字を書き込めなかったのを修正 #32 $UESCでデコードする文字に小文字が含まれているとデコードできなかったのを修正 v1.82 リクエストヘッダの数が1つでフィルターによって値を空にした場合、強制終了するバグを修正 v1.81 httpsでページ接続時にクライアントからGETリクエストのパスにhttps // から始まるフルパスが書かれていると接続できないバグを修正 プリコンパイルヘッダにいくつか追加 v1.80.1 接続が多数ある状態で接続リストを開こうとするとデッドロックするバグを修正 バイパス状態時にタスクトレイアイコンを変更するようにした ログウィンドウは別スレッドでメッセージループするようにした ページ内やヘッダ指定の文字コードに"UNICODE"と書かれているとページを正常にデコードできないのを修正 ログウィンドウを閉じると開けないバグを修正 v1.79 後ろの がタイミングによってマッチしないことがあるのを修正 listsフォルダへAllowSSLServerHostList.txtを追加 (SSL接続を常に許可するホスト名を書きます) #31 wolfSSLをv3.8.0へ更新 v1.78 CONNECTリクエスト時に判定に使うURLにポート番号を書かずに最後に"/"をつけるように変更 #30 接続リストでのidle判定がおかしかったのを修正 v1.77 httpsでの接続時、$SETPROXYが効いてないのを修正 URLコマンドの"src."を実装 v1.76 接続モニター表示時に通信すると強制終了することがあるのを修正 v1.75 接続モニターで表示上接続が残ったままになるバグを修正 #29 接続制限をなくした #26 WTLはnugetから取ってくるようにした v1.74 エクスプローラー再起動時に、タスクトレイアイコンを登録しなおすようにした URLコマンドの"https."を実装 v1.73 $TSTで取り込んだ変数が大文字小文字に区別されていたのを修正 $SETを使って変数に代入した文字列も$TSTで使えますが $SET(0=\1)$TST(\0)とした場合、$TST(\0)は"\1"という文字列にマッチします(変数の展開はされません) v1.72 ブロックリストで7行目以内にメタキャラクタが存在した場合でも固定プレフィックス形式として処理してしまうバグを修正 v1.71 ブロックリストに"(pattern)host.com/"などがあったとき、前方の(pattern)に\0-9などが入っていると強制終了する可能性があるのを修正 SSLフィルター有効時でもバイパスボタンが押されているときやBypass.txtにマッチするURLならトンネリングするように変更 パイパス有効時の効果範囲を接続単位からリクエスト単位に変更 v1.70 ブロックリストに"(pattern)host.com/"などがあったとき、前方の(pattern)が全体一致ではなく前方一致でもマッチしてしまうバグを修正 "(^a)\0"は"(^a)(*)\0"扱いにするようにした (proxomitron互換に) ※wgetはCA証明書生成時にRSA1024bit privateKeyで生成すればいけるっぽいが そもそも"Transfer-Encoding chunked"に対応してないのでプロクシ通す意味ないというか バイナリをダウンロードするんならいいんだけど… v1.69 \wの後ろの検索表現が ) 、 、 | の場合、後ろを見ないマッチングをするようにした v1.68 (a b)\0-9で\0-9にa,bのうち最長マッチの結果ではなくbのマッチが代入されてしまうのを修正 #27 ※bの中で\0-9と同じ変数を使用するとうまくいかないだろう v1.67 ログウィンドウの各種文字色/背景色を設定できるようにした ※GUIはついていません、settings.iniを編集することで設定を読み込みます 例 [LogWindow] COLOR_BACKGROUND=000000 COLOR_DEFAULT=FFFFFF COLOR_FILTER=00FFFF COLOR_REQUEST=FF00FF COLOR_RESPONSE=00FF00 COLOR_PROXY=FFFFFF ログを停止した状態でログウィンドウを閉じて再度開いたときにログを停止が効かないバグを修正 start / end が機能していなかったバグを修正 v1.66 サーバーから送られてくる上位の複数の証明書がおかしいとき、セキュリティの警告ダイアログが出るのを修正 (例 https //www.windowsphone.com/ja-jp) 証明書ストアの開放し忘れを修正 v1.65 置換テキストでの$RDIR、$JUMPがログに表示されていなかったのを修正 CONNECTリクエストでの接続先は$RDIRで書き換えられないように修正 httpsのページで$RDIRを使って別のホストのURLを読み込めなかったのを修正 #23 v1.64 フィルタをクリップボードからインポートするとき、マッチングテキストの行の先頭、末尾に"が存在すると消えてしまうバグを修正 証明書エラーで"ASN no signer error to confirm failure"が原因でセキュリティの警告ダイアログが表示されたとき、"OSからルート証明書の取得を試みる"ボタンを表示するようにした セキュリティの警告ダイアログに表示されるホスト名に実際に接続しようとしているホスト名を表示するようにした RC4暗号、HC128暗号を無効にした wolfsslを v3.6.6へ更新 wolfssl v3.6.6でRSA暗号が無効になっていたのを修正 #20 v1.63 ビルド環境をVisualStudio2015へ移行 Readme.txtを更新(ビルド方法の詳細を追加) $TYPEに"plain"を指定できるようにした(デフォルトではWebフィルターが適用されない) ログウィンドウでログ選択のコンボボックスにURLを表示するようにした ログウィンドウでのPostデータ表示でContent-Typeが"application/x-www-form-urlencoded"以外のときも空のPostデータを表示していたのを修正 ログウィンドウでContent-Typeが"text/xml"のときもPostデータ表示するようにした v1.61 マッチングルールに$URLなどを使うとまれにマッチしないことがあるのを修正 接続リストを閉じるときデッドロックすることがあるのを修正 リスト再読み込み時に読み込み成功行数をログに表示するようにした wolfssl-3.6.0へ更新 v1.60 $LSTのマッチ時に空の文字列を渡すとマッチしないバグを修正 フィルターテストウィンドウで送信/受信フィルターのマッチングパターンのテスト時にテスト文字列が空だとテスト結果に(マッチしませんでした)と返してしまうのを修正 送信/受信フィルターのマッチングパターンにある$LSTもマッチ時にログに出力するようにした SSLフィルターでホスト名の長さが64文字以上だとブラウザにセキュリティの警告ダイアログが表示されることがあるのを修正 v1.59 文字コード判別時Converterの取得に失敗する可能性があるのを修正 "(a b) c"で"c"の判定時"b"のマッチ結果を使用してしまうバグを修正 起動時タスクトレイにアイコンが登録されないバグを修正 #17 v1.58 接続モニター表示時にデータ競合が起こる可能性があるのを修正 接続モニターを非表示にしてもう一度表示すると前のデータが残ってしまうバグを修正 メインダイアログのLogボタン右クリックで接続モニターを表示するようにした lists\PriorityCharset.txtを追加(Proxydomo側の文字コード判定の優先順位を変更できるようにした。詳しくはPriorityCharset.txtを参照) v1.57 フィルター分析時に毎回エディットボックスからテキストを取得していたのをなしに修正 "\0-9"の後マッチングパターンがあるフィルターを高速化 サーバー側が送ってくるCA証明書がおかしいとき、"ASN sig error, confirm failure"の警告が出るのを修正 icuライブラリをv55へ更新 設定の読み込みに失敗したときエラーダイアログを出すようにした $LSTの後のマッチングパターンがマッチしなくてもログにマッチの表示が出る可能性があるのを修正 接続モニターを追加 ログウィンドウでの"Postデータ"表示を追加 ログウィンドウで化けた文字が表示されることがあるのを修正 Webフォントのダウンロード時の"Content-Type"が"text/html"だとフォントの内容を壊してしまうバグを修正 #16 v1.56 listsのサブフォルダも監視するようにした listsのサブフォルダ以下のファイルもブロックリストとして利用できるようにした "(a*|b c|\0)E"で" "の前のマッチに"E"まで含まれてしまうバグを修正 $SET(0=\0)のように変数を入れ子にすると強制終了するバグを修正 ISO-8859-1の文字列をクリップボードからインポートするとき文字が欠落するバグを修正 $TSTを使うと強制終了するバグを修正 $ADDLSTを実装 ブロックリストの"LOGFILE"設定を見るようにした 置換テキストでの"\d"を実装 フィルタテストウィンドウの親をメインダイアログに変更 listsフォルダ以下のフォルダ名の先頭に"#"が付いたフォルダは読み込みから除外するようにした v1.55 特定の環境でダウンロード速度が遅くなることがあるのを修正 #14 "このPCからの接続のみ許可する"オプションを追加 データの送信中に接続を切ろうとしたり終了しようとしても終了しないバグを修正 サーバーから送られてくるルートCA証明書がおかしいとき"ASN no signer error to confirm failure"の警告が出るのを修正 v1.54 SSLFilterで長いホスト名に接続しようとすると強制終了するバグを修正 CA証明書生成時に鍵を選択できるようにした #12 v1.53 CA証明書生成時にECC256bit鍵を生成するようにした ブラウザに吐くサーバー証明書の署名にSHA256ECDSAを使うようにした SSLのページから$JUMPコマンドを使用しても機能しないバグを修正 v1.52 楕円曲線暗号のみに対応したSSLのサイトを開けないバグを修正 #10 TLS1.2を実装していないブラウザでSSLFilterを利用できなかったのを修正 #9 CA証明書生成時2048bitRSA鍵を生成するようにした SSLFilterでブラウザに吐くサーバーの証明書の署名にSHA256を使うようにした #8 "閉じるボタンでタスクトレイに入る"オプションを実装 #11 v1.51 SHA384で署名された証明書を検証できないバグを修正 Aboutで文字列が見切れているのを修正 #3 フィルタ編集ウィンドウでマッチングパターンと置換テキストのエディットボックスに水平スクロールバーを付けた #7 2G以上のファイルをDLできなかったのを修正 v1.50 SSL/TLSのライブラリをGnuTLSからwolfSSLへ変更 "切断"を実装 #5 ダイアログのフォントにMS Shell Dlgを使うように変更(日本語表示ならMeiryo UIを使うようにした) #3 英語UIの翻訳を修正 #4 ブロックリストに"*(.aaa.com/|.bbb.com/)"などを入れると強制終了するバグを修正 ブロックリストは *.aaa.com/ *.bbb.com/ と並べたほうが早いです v1.49 ブロックリストのマッチ時ログに出力表示される行数が1行ずれていたのを修正 SSLSessionTicketを無効にしてしまっていたのを修正 言語ファイルのtypoを修正 #1 thx!! chromeでgoogleのページが開けないのを修正(Content-Encodingにsdchが入ってるとページが解凍できないのでバイパスするようにした) バイパスを回避したいなら以下のフィルタを入れること [HTTP headers] Key = "Accept-Encoding Chrome accept-encodeing sdch delete" In = FALSE Out = TRUE Active = TRUE Multi = FALSE URL = "" Bounds = "" Limit = 256 Match = "gzip, deflate, sdch" Replace = "gzip, deflate" v1.48 フィルター編集ウィンドウとフィルターテストウィンドウでCtrl+Aが効かないのを修正 接続数の上限を200に上げた 言語ファイルのtypoを修正 #1 thx! v1.47 置換テキストの\r\nを無視するようにした 64bit版でのスレッドプールの実装の利用のやめをやめにした(ブラウザ側の問題だった) 言語環境がJapanese/English以外の環境でUIが化けるのを修正(デフォルトEnglish選択がバグっていたのを修正) Proxyサーバー側の待ちループをselectで待つようにした(少し応答が早くなった) GnuTLSのバージョンを3.3.19に上げた SSL接続でのExportRSA暗号を使用しないようにした v1.46 置換テキストの改行を出力時、無視するようにした 64bit版でのスレッドプール実装の利用をやめにした v1.45 https //local.ptron/ へのファイルリクエスト時、ファイルのサイズが大きいと最後まで送信されないバグを修正 翻訳ファイルの番号被りを修正 64bit版でしばらく接続がなかった後のリクエストが著しく遅くなることがあるのを修正 v1.44 UIに英語版を追加(※オプションから変更できます) フィルタテストでマッチングパターンなどがおかしかったとき、理由を表示するようにした ログウィンドウで"アクティブな接続ログのみ残す"を削除 v1.43 $RDIRでURLコマンドを含むリダイレクトが実行されたとき、URLコマンドが機能しないバグを修正 v1.42 フィルター編集ウィンドウでフィルター上の右クリックメニューで"フィルターを編集する"を選択してもフィルター編集ウィンドウが表示されないバグを再修正 64bit版はスレッドプールを使用するようにした ブロックリストで字下げされた複数行の検索表現を一つとしてみなすようにした ブロックリストにBOMがついてると最初の行に記述された検索表現がマッチしないバグを修正 SSLフィルタリング有効時、起動後初めてSSLのページに接続しに行ったときに強制終了することがあるのを修正 v1.41 フィルター編集ウィンドウでフィルター上の右クリックメニューで"フィルターを編集する"を選択してもフィルター編集ウィンドウが表示されないバグを修正 $LSTがマッチしたときログウィンドウにリストの何行目がマッチしたか表示するようにした(ヘッダフィルターでのURL、WebフィルターでのContentTextマッチングでのみ) v1.40 ポート番号が書かれたURLをリクエストされた時、httpでポートが80、httpsでポートが443の場合、リクエストヘッダのHostにポートを書かないようにした v1.39 フィルター編集ウィンドウでマッチングパターンと置換テキストの間のスプリッターを移動できるようにした フィルターテストウィンドウで上下のエディットボックスの間のスプリッターを移動できるようにした メインダイアログに"バイパス"を追加 v1.38 "[]","\s","\w"などで無関係の文字がマッチしてしまうバグを修正 フィルター編集ウィンドウの上限バイト数をチェックするようにした v1.37 $USEPROXY、$SETPROXYを実装した($SETPROXYはproxomitronの仕様と違い、オプションのRemote HTTP Proxyリスト内の文字列に完全一致する必要があります) メインダイアログに"リモートプロクシを使用"のチェックボックスを追加 送信/受信ヘッダフィルタのテストでURLパターンが空だと強制終了するバグを修正 置換テキストでの$ALERTを実装 BypassMatcherを起動時に生成するようにした システムトレイの右クリックメニューに"リモートプロクシを使用"を追加 v1.36 * のマッチでテストする文字列の最後の1文字を消費しないバグを修正 $LSTでURLハッシュ形式のマッチを行う時、先頭のワイルドカードのマッチングに不適切な文字列を与えてしまうバグを修正 フィルタ管理ウィンドウでフィルタやフォルダ名を名無しにできなくした フィルタ管理ウィンドウでRootフォルダでも右クリックメニューを表示するようにした フィルタ管理ウィンドウでダブルクリックでフィルタ編集ウィンドウを開くのをアイコンとラベル部分に限定した フィルタ管理ウィンドウでフォルダの間にドロップできなかったのを修正 フィルタ管理ウィンドウでRootが選択状態で"フォルダ作成"を実行すると強制終了するバグを修正 v1.35 ブロックリストで"(abc|def)google.com/"などの先頭にカッコのあるフィルタを追加すると強制終了するバグを修正(報告thx!) ブロックリストで"*google.com/"など(ワイルドカードの直後 . が続かない文字列)のフィルタが"*.google.com/"と解釈されてしまうバグを修正 ブロックリストを再読み込みした時、リスト内のマッチングパターンに異常が見つかったときログウィンドウに表示するようにした ブロックリストの最後の1行を読み込めていなかったのを修正 filter.xmlはxmlで書かれていて、xml内では文字列に「 」や「"」などが使えないので内部で<などに置換して保存しています。化けているわけではありません v1.34 フィルタ管理ウィンドウでRootにチェックボックスがついてるのを無くした フィルタ管理ウィンドウでアイテム上での右クリックメニューを追加 フィルタ管理ウィンドウでアイテムをフォルダにドラッグした時、フォルダを開くのを遅らせるようにした フィルタ管理ウィンドウでフォルダ内のフィルターをクリップボードへエクスポートできるようにした(フォルダ構造はエクポートされません) フィルタ管理ウィンドウでWebフィルタとヘッダフィルタとでアイコンを変えるようにした v1.33 JISコードのページが化けるのを修正 リリース時のログ出力レベルをwarningまで引き下げ メインウィンドウのログボタンを押した回数だけ表示されるログが増えるバグを修正 $LOGでログの内容が表示されないのを修正 $LOGで"!"ログウィンドウ表示、R=赤 W=黒 w=グレー B=青 G=緑 Y=黄 V=バイオレット C=シアンでの色表示に対応 $ALERTを実装 v1.32 タスクトレイアイコンの右クリックメニューにいろいろ追加 受信ヘッダフィルターで$FILTER(true)を行ってもWebページフィルターが有効にならないバグを修正 Webフィルターデバッグ時、出力するhtmlタグの順序がおかしくなることがあるのを修正 初めて検知したページ内文字コードがキャッシュ内に存在しないとき強制終了することがあるのを修正 v1.31 SSLフィルタリングでSSL3.0を使わないようにした(SSL v3 POODLE対策) SSLのページから$RDIRなどでリダイレクトできないバグを修正 ページの文字コード判定の優先度の閾値を上げた gnutlsを3.3.9に更新 v1.30 zlibを1.2.8に更新 deflateで圧縮されたページが解凍できないバグを修正 httpsの接続で、フィルタに利用するURLに"example.com 443"のようにポート番号が書かれるのを書かれないようにした httpsでフィルタによって"\k"などで接続が切られようとするときに接続が切られないバグを修正 https //hotmail.co.jp などで証明書エラーが出るのを対処したつもり SSLフィルタリング有効時、強制終了することがあるのを修正 ページの文字コード判定時、ページから推定された文字コードの信頼度が一定以上なら、ページ内の文字コード指定より推定された文字コードを優先するようにした(Proxydomoの誤判定でページが化けるのを修正) v1.29 SSLフィルタリング有効時、https //local.ptron/ファイル名 で htmlフォルダ内のファイルを返せるようにした local.ptronで.icoファイルを返すとき、ちゃんとしたContent-Typeを返すようにした Webページフィルタ無効かつウェブフィルターデバッグ有効時、受信ヘッダから"Content-Encoding"を削除していなかったのを修正 ウェブフィルターデバッグで、サーバーから受け取った生のヘッダとフィルタリングを通したヘッダを同時に表示するようにした httpsのページをウェブフィルターデバッグにかけたとき、ブラウザに警告が表示されるのを修正 v1.28 x64版でレスポンスに"Transfer-Encoding chunked"が送られてくるとき、チャンクサイズの末尾に0~9,A~F以外の文字があるとチャンクサイズを誤認識してしまうバグを修正 Webフィルターデバッグ有効時、"304 Not Modified"が帰ってこないようにした v1.27 x32版のGnuTLSをver3.2.17に更新 httpsで無効なホストに接続しようとするとスレッドが終了しないバグを修正 上の状態で終了させたとき、プロセスが残ってしまうバグを修正 "HTTP/1.1 101 Switching Protocols"をバイパス処理できていなかったのを修正 httpsでのファイルアップロード時にCPU使用率が極端に上がってしまうのを修正 v1.26 SSL/TLS接続をフィルタリングできるようになった オプションダイアログを追加 接続数の最大値を100に上げた プログラム全体の最適化有効時にurlprefixがバグるのを修正 HEADのレスポンスで"Transfer-Encoding chunked"が返されると接続しっぱなしになるバグを修正 ※SSLフィルタリングについてはSSLフィルタリングを参照 v1.25 icuがmsvcr100.dllに依存していたのを修正(起動にvs2010 C++ランタイムライブラリが必要だったのを必要なしにした) icuのバージョンを53.1に上げた boostのバージョンを1.56.0に上げた v1.24 local.ptron へのリクエストで正常なレスポンスを返せていなかったのを修正 ウェブフィルターデバッグ有効時、 head ~ /head 内に" meta charset="ページの文字コード" "を埋め込むようにした(ウェブフィルターデバッグ時にページが文字化けするのを修正) v1.23 ログウィンドウで個別のリクエストについて表示できるようにした ログの文字列を右端で折り返すようにした local.ptronからswf/jsonファイルへのリクエストがきたとき正常なContent-Typeを返すようにした vbscriptをデフォルトでウェブフィルターにかけないようにした $TYPEに json, xml を指定できるようにした(例$TYPE(json))これらはデフォルトではフィルターされません 稀に"502 bad gateway"が表示されるのを修正(何度かリトライするようにした) やっとflvplayer_wrapperが使えた、以下のフィルタが必要 NicoVideo Back to HARAJUKU (out) 2014/01/19 NicoVideo Set flvplayer_wrapper 100916 NicoFlvplayerWrapper2 Redirect custom 071011 (both) URL Redirect wrapper [HTTP headers] Key = "URL Nico player_version.xml redirect" In = FALSE Out = TRUE Active = TRUE Multi = FALSE URL = "" Bounds = "" Limit = 256 Match = "http //www.nicovideo.jp/swf/(player_version.xml*)\2" Replace = "$RDIR(http //www.nicovideo.jp/swf/player/\2)" html フォルダ直下に flvplayer_wrapper.swf html\nico_wrapper フォルダ以下に nicoplayer.swf などの旧式プレイヤーが必要 v1.22 文字コードの判別でページ内のmetaタグで指定された文字コードを優先するようにした ページ内文字コードの検索を少しだけ高速化 が正常に機能していなかったのを修正 (a(b)\0)\1などの入れ子のキャプチャが正常に機能していなかったのを修正 $ESCでascii文字以外も%uXXXXの形式でエンコードするようにした $UESCで%uXXXX形式をデコードできるようにした v1.21 フィルターテスト ウィンドウのテキストエディタのリミットを3MByteまで増加させた フィルターテストの分析結果の処理速度で小数点3桁以下は切り捨てるようにした リストをハッシュ化して持つようにした(固定プレフィックス形式、URLハッシュ形式) ※ハッシュに関しては こちら を参照してください 2500行ほどあるリストを使用したフィルタで最大20倍ほど早くなりました ページのレスポンスヘッダに書いてある文字コードをicuで変換できない場合、ページ内から推定した文字コードを使って変換するようにした ログウィンドウのウェブフィルターデバッグのチェックボックスが効いていなかったのを修正 ウェブフィルターのデバッグとバイパスの同時指定時にバイパスが無視されるバグを修正 ver 1.20 local.ptronでhtmlフォルダに置いたバイナリファイルにリクエストが来たとき、ファイルの途中までしか送信されないバグを修正 ver 1.19 フィルター管理ウィンドウで各種ボタンにアイコンを追加した フィルター管理ウィンドウで行った変更はすぐに保存するようにした 文字クラス化([])で [ の後で ] が出てこずにパターンを最後まで消費してしまうと無限ループするバグを修正 64bitバイナリを作成できるようにした フィルター管理ウィンドウで同じフォルダ内でフィルターを上に移動しても位置が保存されないバグを修正 最適化を最大限掛けるようにした ver 1.18 まれに強制終了するバグを修正(文字コード判別エンジンを使いまわしていたのが原因、これで完全解決なはず) ver 1.17 Content-Typeが空の場合にウェブフィルターを適用していたのを修正(この修正でまれに強制終了するバグが治ったかも) ウェブページの末尾数バイトがブラウザ側に送られないことがあるバグを修正 ver 1.16 レスポンスヘッダの"Content-Type"が"charset=none"となるとき、ブラウザ側でページが表示されなくなるバグを修正 ver 1.15 ブラウザから同じポートに複数リクエストされたとき、サーバーとの接続が切れているとブラウザ側にデータを送信しないバグを修正(たまに白紙なページが表示されることがあるのを修正) 複数のURLコマンドを組み合わせた時におかしくなるのを修正 ver 1.14 サイトからデータの受信が終わったあとに、ブラウザと接続が繋がったままになることがあるのを修正 検索ツリーのスレッドセーフでない部分を全部修正(まれに強制終了するバグが治ったかもしれない) ヘッダフィルタの置換で \0 などを使うとまずい問題を修正 icuライブラリのアップデート(icu**50.dllはすべて削除してください) ver 1.13 圧縮されたページで最初のチャンクが小さいと文字コードの自動判別に失敗して文字化けするバグを修正 ver 1.11 windows終了時にproxydomoの表示状態が保存されないのを修正 ブラウザからHEADリクエストされると接続がタイウアウトするまで切れないのを修正 サーバーから304レスポンスコードなどが返されたときにボディにゴミがついてるとブラウザにレスポンスコードを送れないバグを修正 ver 1.10 ログにRecentURLs機能を追加した(最近アクセスしに行ったURLを表示します) 右クリックでURLをコピー、ダブルクリックでURLを開きます \w が後ろを見ない検索になっていたのを修正 \d の仕様を変更(0-9の数値にマッチ- 0-9の連続した数値にマッチ) ver 1.9 Content-Lengthを送ってこないサーバーだとブラウザ側が途中までのデータしか読み込めないバグを修正 Matchが複数行あるフィルターを正常にインポートできないバグを修正 ver 1.8 フィルターに食わせるデータのバッファが足りないと$INESTがマッチしないバグを修正 ウェブフィルターデバッグ時、フィルター名が化けて表示されるのを修正 まれにURLコマンドが実行できないバグを修正 複数のURLコマンドを組み合わせるとBad Gatewayとなるバグを修正 フィルター管理でフォルダを作って管理できるようにした ※フィルターにチェックがついていても、親フォルダにチェックがついていないとフィルターは動作しないので注意してください。 ※Root左のチェックは飾りです フィルターをクリップボードヘエクスポートする機能を付けた ver 1.7 フィルタ名に日本語が使われているとログ表示が化けるバグを修正 マッチングルールに"\d"を追加 ※ 数字の 0-9 にマッチします "\x"を復活させた ※proxomitronとは違って自分では設定できません。プログラム起動時に16文字のランダムな文字列が設定されます URLコマンドを復活させた ※アドレスバーから直接は無理なので、下記のURLにあるフィルタなどを使ってください 各キーを押したまま読み込むと各URLCommandを使用(BでBypass等 ※ 仕様が変わったので"dbug.."などは"dbug."に変更してください( ".." を "."にする) ver 1.6 ページの文字コードに合わせてマッチングパターンの文字コードを変えるようにした(実際は逆だが) ※マッチングパターンで普通に日本語が使えるようになった ※注意1 だいぶ内部を変えたのでマッチしないフィルタが出るかもしれません ※注意2 リストにも日本語が使えますが UTF-8として読み込みますので、日本語を使う場合リストファイルの文字コードを変えてください filter.json - filter.xml に変更 ver 1.5 フィルタテストの分析結果で、平均時間と処理速度が正しくなかったのを修正 マッチングパターンの"(~)\#"などが正常に動作していなかったバグを修正 大きいファイルのダウンロード時などCPUとメモリ使用率が極端に大きくなっていたのを修正 ver 1.4 ログを停止したりログウィンドウを閉じるときデッドロックするバグを修正 あらかじめ検索木を作っておくことで高速化した ver 1.3 リストの更新を検知して自動で再読み込みするようにした ver 1.2 $JUMPや$RDIRで飛んだ時ログに表示するようにした ホストに複数IPが設定されていて、Connectに失敗したとき順番に試すようにした サイトへの接続に失敗したとき、ブラウザがサイズ0のファイルをDLするバグを修正 メインフレームにアクティブな接続数を表示するようにした メインフレーム終了時、接続中のリクエストがあった場合に確認ダイアログを出すようにした バイパスリストに対応(.\list\Bypass.txt を編集することによってフィルターを適用しないURLを指定できます) すべての接続が完了していない状態で終了するとたまに強制終了するバグを修正 ver 1.1 gzipで圧縮されたページが途中で切れるバグを修正 Aboutダイアログにバージョンを表示するようにした 初回起動からの終了時アプリケーションが強制終了するバグを修正 フィルター対象のContent-Type以外にも"Transfer-Encoding chunked"を付けてしまっていたのを修正 ログウィンドウを強化 URLパターンもテストできるようにした フィルターイベントもログに表示できるようにした 使えるコマンドが増えた ver 1.0 初版
https://w.atwiki.jp/mc-mods/pages/16.html
MCヘリコプターMOD MCヘリコプターMODは、ヘリコプターや戦闘機、UAV、関連するアイテムを追加するMODです。 ヘリコプター:AH-64 アパッチ、AH-6 キラ-エッグなど 戦闘機&輸送機:AV-8B ハリアー II、MV-22 オスプレイ、A-10 サンダーボルトII など その他:レーザー目標指示装置、 鎖(機体の牽引)、コンテナ(アイテム輸送用)、パラシュート、携帯対空ミサイル、UAV地上誘導ステーション などを追加します。 操作方法や詳しいことはヘリコプターMOD wikiをご覧ください ダウンロードはこちらから (このMODは現在1.7.10までしかありませんので、ご注意ください)
https://w.atwiki.jp/hrhmkwsk/pages/328.html
80年代を代表するドイツのスラッシュメタルバンド。 KREATOR、DESTRUCTIONと並びジャーマンスラッシュ三羽烏と称される。 スリーピースから奏でられる爆走のスラッシュサウンドはまさに狂気。 聴けば最後、爆音のスラッシュ地獄から帰ることはないだろう。 このアルバムを買え! 『Agent Orange』 『Code Red』 Agent Orange http //www.youtube.com/watch?v=9V9WVz9yFt0 Ausgebombt http //www.youtube.com/watch?v=p5jzgM7us8A Code Red http //www.youtube.com/watch?v=nzomzQ75STg
https://w.atwiki.jp/svr2008caw/pages/41.html
【24/7 Mode】 SVR2008攻略 24/7 Modeの攻略情報まとめ このモード、前作のシーズンモードとGMモードを統合した内容です。 【モード解説】 Play as WWE Superstar 既存のスパスタを主人公にしてスタート。前作のシーズンに該当。 Play as Created Superstar 作成したCAW選手でスタート。ただし男性CAWのみ。女性CAW不可。 Play as WWE General Manager 各ブランドのGMになってスタート。前作のGMモード。 【一番楽な設定】 始める前に設定すること GMモード開始後、PC選択してReports開く オプションのPlay Optionsを選択 英語で「選手の負傷の有無」とかあるので全部OFF これで選手の負傷の影響は無いので安心してスキップできる。 (一番下の2つはGMモード達成クリア後に選択可能) また、Play Optionsは「Re-Run」がオススメ。 一度設定した先週の試合の内容設定を覚えて継続してくれるので スキップが大幅に楽になる。 (次のPPVまで試合設定しなくてOKなので楽) 【Play as WWE Superstarで一番楽な進め方・稼ぎ方】 24/7 Modeで 強い選手を選びPlay as WWE Superstarを選択。 (難易度レジェンドを選んだ方が稼ぎやすい?) カレンダーの一番下の最後の月の日付を選択、 「この日までの経過をシミュレートします。よろしいですか?」で「はい」選択。 あとはシミュレートしてスキップするだけ。 スキップして放置してる間、イベントは進むし、 お金も溜まる。 (強い選手ならシミュレートした試合は勝ちやすい) 3~4年続ければ、店のアイテムのほとんど買えるハズ。 【Play as WWE General Managerで楽な進め方】 Play as WWE General Manager選択後は 上記と同じようにスキップ。 強くて人気のある選手を事前に揃えるのが理想。 ただし、スキップ前には 怪我の有無のオプション設定、選手の契約期間には注意。 また、このモードではWWE Shopで使えるお金は手に入らない。 この方法では確実に他のブランドに必ず勝てないので GMモード達成するには次の方法がオススメ 【Play as WWE General Manager攻略法】 (まとめ中) 他のGMに勝って、ビンスに表彰されるには 「他のブランドより人気が高い状態になる」のが必須。 Fan Supportの人気グラフが他のブランドより高い状態で1年乗り切ればOK。 そのためには、次のようにすれば人気が上がりやすい。 人気の高い&強い男性選手を6人以上そろえる事 (クリーン、ダーティが半々だと なお良し) その6人にChampionのベルトを全部設定して、 毎週試合でベルトをかけて試合をさせる事 Rivalriesでライバル抗争のシナリオを選択。 4つ星以上の効果の高いものを選択。 (クリーンとダーティがペアだと選びやすい。 また定期的にライバル関係が終わってないか、マメにチェックすること。 終わってたら選びなおす。) 試合をさせるとき、必ず2回のPromoでTitle Match Hypeを選択、 人気を上げたいベルトの試合前に必ずPromoを行い人気を上げる。 通常の試合はハードコアがオススメ。 (4人ハードコアの試合で奪い合えば なお上がりやすい) 自分のPPV1週間前の試合のPromoは PPV Hypeを必ず行い、PPVのプロモーション。 PPVになったら試合は ベルトをかけた6人制、4人制のHell in a Cellがオススメ。 6人だとArmageddon Hell in a Cell、超オススメ。 ・・・以上の基本的な進め方で、人気が上がりやすいと思います。 特にPPV試合後には他ブランドより大きく差がつくはず。 やる事は前作とほとんど同じです。 それでも人気が上がらない場合、 今回増えた要素を選択します。 相手の試合がある日にEvents Activitiesを選択。 自分の人気&実力のある選手でOther Brand Invasionを選択。 相手のショーに乗り込んでアピールして妨害、 人気を上げます。 上記の効果を上げたい場合、 何もない日にマイクスキルなどを訓練、 僅かながら効果が上がります。 自分のPPV1週間前の平日にはPPV Commercialに看板選手を出すのも良し。。 現金も貰えます。 上記のポイントを抑えて継続すれば 人気が右肩上がりになり、 他ブランドに勝てるはず。 ビンスに褒めてもらえます。 (以後更新予定) 「WWE2008 SmackDown vs Raw」(SVR2008、エキプロ9) 【コメントする】 名前 コメント
https://w.atwiki.jp/soreiro/pages/302.html
Valentine s Day Event 2013 目次 ◆ 概要 ◆ Costume Cake hat quest ◆ Orc Woman's Rage event ◆ Incubus/Succubus quest◆ Monster List ◆ 概要 期間 イベント 外部リンクなど 2/12~3/12 [R/C] Valentines event [C R] True love awaits with our Valentines Day events! -Event 2/26?~3/12 Costume Cake hat quest Costume Cake Hat Event this weekend! -News どちらも、3/5→3/12 までに延長 Valentines event 公式の記事 ▼ [C&R] True love awaits with our Valentines Day events! -Event ※ 更新あり Events 2/12/2013 真の愛が私たちのバレンタインデーのイベントでお待ちしてます ロマンチックな休日に、複数のクエスト、ショップアイテムとダブルEXP が、ルーンミッドガルドの世界に登場 いくつかのイベントで、このロマンチックな伝統を尊重します! monster drops and experience rewards は、2/12~26 first Valentine’s day quest では、復讐心に燃えた Orc Lady の呪いから、愛のカップルを守ります。このクエストは、新しい休日をテーマにしたヘッドギアとロマンチックなお菓子が報酬です。 ( a new holiday themed headgear as well as romantic candies ) players level 20 ↑なら、Geffen の the wizard Valentine(120, 98) と会話で開始。報酬は festive headgear second questでは、lovestruck fairyがインキュバスとの愛情の接続を行うのを助けます。レベル制限はありませんが、abyss lake 1 への旅行を伴わないことは注意して使用してください!(※ 伴う?) Hyllis in Comodo と会話で開始。クエストの報酬は、expの塊です。repeatable で、VIPが12時間、non-vip が24時間です これらのクエストは3週間にわたって実行し、楽しいヘッドギアの報酬が含まれています! 今月はたくさんのイベントがありますので、フォーラムやサイトから目を離せない! これらのクエストに加えて、リニューアルとクラシックの両方に Groove pack を追加 参考Valentine's Day Event (2013-02-12~2013-02-26) - iRO Wiki Cake Hat 関係の話題Cake Hat (Costume Headgear) -iWdb 2012 Valentine's Day Event - iRO Wikiこれの (Quest 1) が実装されてる? Cake Hat (Costume Headgear)がもらえるらしい Cake Hat - Public Service Announcement -Forums (Started by Dreimdal, Feb 27 2013) Making Cake Hats -Forums (Started by Helios0, Feb 08 2012) Headgear Ingredients - iRO Wiki ▼ 2/26 Tex Avery s Birthday maintenance -Forums Forums 更新あり。追加項目 +Costume Cake hat quest from last year s Valentines day event will be in for one week for those looking to make one. ( 昨年のバレンタインのイベント由来で、Costume Cake hat quest が1週間 ) #209 Oda (2/27) Since the costume cake hat quest was put in, the enriched event was extended just until next week when the cake hat quest leaves. ▼ Costume Cake Hat Event this weekend! -News News 03/01/2013 モスコビアの非常に甘~いチョコレート大好きなクレイジーギャルのクエストです! +8 cake hat を用意すると、SP+60 になっちゃうコスチュームバージョンに交換してくれます! Check out the iROwiki guide for doing the quest Valentine s Day Event (Quest 1) After the maintenance, we will have a special NPC in the Eden group next to Primo D Buffer that will give a daily drop rate buff to players who completed the quest and are wearing the costume hat! If you completed the quest last year, you will still be able to get the buff, but your characters must have completed the quest in addition to be wearing the hat! ( メンテ後、このコスをかぶると毎日のドロップ率のバフを与える特殊NPCが登場します。去年のクエストを完了した場合でも、バフを得ることができますが、帽子をかぶっていることに加えて、クエストを完了している必要があります!) ◆ Costume Cake hat quest タイトル Costume Cake hat quest レベル制限 45 前提 なし 必要アイテム +8 Cake Hat、15x Stolen Cacao 報酬 Exp 500K/400K ( VIP 750K/600K )? 報酬 その他 Costume Cake hat (Headgear) その他。(お菓子交換可能に?) 備考 2012 Valentine s Day Event から、再実装 備考 3/5~ に特殊NPCが登場してドロップ率のバフをくれる 手順 作業中です in the tool shop (moscovia 222, 176) Pinkamenia(mosc_in 21,246) と会話 help her. She will tell you to bring a +8 Cake Hat to the Baker Extraordinaire you can hunt the Stolen Cacao. Cake Hat は、ルティエで作成して、自力で+8にして持参する 隣の Baker Extraordinaireと会話 to get the Cake Hat (Costume Version). Notethat having a Cake Hat (Costume Version) is entirely optional, provided you can get the Stolen Cacao required. Hunt 15 Stolen Cacao while wearing the Cake Hat (Costume Version) (or purchase it from other players) and return back to Pinkamenia. She will reward you with 500K/400K ( VIP 750K/600K ) バフのNPC。帽子なしだと反応なし ※ 3/5 当初は、Eden1階で別のキャラだったが、移転・別キャラに Costume Cake hat buff NPC will be added to Outside Prontera tool shop, this NPC will give a daily buff for those who completed the cake hat quest and are wearing a costume version of the hat. ◆ Orc Woman s Rage event タイトル Orc Woman s Rage レベル制限 20 前提 なし 必要アイテム なし 報酬 Exp なし 報酬 その他 Sweet Valentine (Headgear) または粗品がランダムで 備考 repeatable で、20時間 (VIPは不明w) 粗品>5x Handmade White Chocolate, OR 5x Hand-made Chocolate, OR 10x Chocolate, OR 10x White Chocolate 配達後のクエスト表の不具合は、2207 2013-2-14 パッチで改修 手順 作業中です Geffen の the wizard Valentine(120, 98) と会話で開始 5x Love Wand をもらう Broken Hearted Woman を見つけて会話 5x Love Wand を配っていく Use すると、Woman in love になる ランダムに、Sweet Valentine (Headgear) または 5 White Chocolate + 5 Random chocolate をくれる5x Love Wand を配った後は、20時間待ち (※ なんか、Orc Woman を待ち構えて みんなで叩きのめしていましたが? ) Sweet Valentine (Headgear) スペックはこちら。3/5 まで効果 blankimgプラグインエラー:ご指定のファイルがありません。アップロード済みのファイルを指定してください。 ◆ Incubus/Succubus quest タイトル Fae Crossed Lovers レベル制限 なし 前提 なし 必要アイテム 花束( Bouquet )、聖水 ハント 20x Ferus (Green)、20x Ferus (Red) 報酬 Exp [R] 150K/150K 他、VIP は 1.5倍 報酬 その他 Girl s Naivety (2)、Boy s Pure Heart (2) 備考 repeatable で、VIPが12時間、non-vip が24時間 abyss lake 1 へ自力で出直す場合は、通常アクセス用のしかるべきアイテム 手順 First Flight Hyllis has asked you to take a letter to the mystical mailbox on the Comodo Docks Hyllis と会話で開始 in Comodo (65, 344) 辺り (※ 画像のLilith (Succubus)は、誰かの進捗によって見えたり見えなかったり) Mystic mailbox at the harbor へデリバリー カプラから南へ桟橋を歩くと見つかる Flower Power Alp has requested you bring a bouquet to Hyllis for him. 会話すると、Alp(Incubus)が現れて会話が進行 Hyllis に花束( Bouquet )を送るように頼まれる Mail Man Hyllis has asked you to take a letter to the mystical mailbox on the Comodo Docks Hyllis に用意した花束を与え、また別の手紙を届けに行く Succubi Lilith has tossed you into Abyss Lake Dungeon, she hinted that Alp is down here somewhere on this level.You should try to find Alp mystical mailboxと会話で、 abyss lake 1 へ送られる (succubi は、succubusの複数形らしい ) Incubi Alp has asked you to kill 20 of each Ferus to clear the way for him. He will meet you in the Comodo Casino once you are done.Alp を見つけて会話 (209,145) kill 20x Ferus (Green)、20x Ferus (Red) を要求されるので、倒す (途中で死んだりで戻った場合は、自力で出直す) 終わったら、コモドへ戻る カジノの中で、Alp と会話 (167,106 )辺り Fairy Dust Alp said to bring Holy Water with you and to talk to Hyllis. He is afraid that Lilith will try to interfere. Hyllis と会話で進行 誰に聖水をかけるか選べ的な質問に答える 報酬をもらう ※ 中段 Lilith (Succubus) ※ スレ情報コミで、選択上中下で、VIP>150k/150k、225k/225k(テイム)、70k/70k (プロンテラに飛ばされる)※ 聖水は持参か会話上なのか未確認。たまたま持参→wikiでは必要アイテム Please wait 24 hours before repeating the quest または Please wait 12 hours before repeating the quest ◆ Monster List Monster Lv HP Base Job Race Attribute Hit Flee Ferus (Green) 126 39,054 4,185 2,989 Dragon Earth 2 383 383 Ferus (Red) 126 25,668 3,985 2,989 Dragon Fire 2 406 405